Every pull request gets its own production.

Build · Share · Deploy

From pull request to production, without the queue.

Canary builds a full-stack copy of your app for each branch, shares it by link, and tears it down the moment you merge.

GitHub and GitLab · Compose or Helm · Runs in your cloud

Real environments for every branch

Staging staging.northwind.app
  • Overview
  • Deployments
  • Logs
  • Metrics
  • Settings

Overview

Branch
feat/multi-currency
Deployed
2 minutes ago
Commit
a41f9c2
URL
https://staging.northwind.app
Open environment
Dev dev.northwind.app

Pull requests

3
  • #482 Split invoices by currency

    2s ago

  • #481 Improve search ranking

    1h ago

  • #480 Add customer filters

    2h ago

Production northwind.app main · a41f9c2
  • Overview
  • Deployments
  • Logs
  • Metrics
  • Settings
#482 Split invoices by currency Building Live
feat/multi-currency main
  1. 09:12:04 clone feat/multi-currency @ 9f3e1b0 2s
  2. 09:12:06 build web, api, worker from docker-compose.yml 1m 12s
  3. 09:13:18 postgres@16 restored from nightly snapshot 48s
  4. 09:14:06 mask users.email, users.name, cards.number 9s
  5. 09:14:20 deploy to ephemeral environment 14s
  6. 09:14:34 health checks passing 3s
Environment is live Open app
  • Automatic previews

    For every pull request

  • Realistic environments

    With your full stack

  • Share by link

    With anyone

  • Tears down automatically

    When you merge

Where 1,140 engineering teams review their pull requests

  • Oxbow
  • Tessel
  • Halyard
  • Brightline
  • Kilnworks
  • Marlow

Last 30 days

Staging stopped being a queue.

Measured across every Canary workspace, from the first push on a branch to the last container removed.

Median time from push to a live link
3m 41s
Preview environments created
11,806
Median teardown after merge
2m 12s
Average cost of a preview-hour
$0.19

Open a pull request. Canary does the rest.

No staging calendar, no thread asking who broke it. Canary listens for three events and handles each one.

  1. pull_request.opened

    Builds the whole stack

    Your Compose file becomes web, API and worker, next to a Postgres seeded from last night's masked snapshot.

  2. push

    Redeploys in place

    Each commit rebuilds only the services that changed, and the link stays the same.

  3. pull_request.merged

    Tears it all down

    Containers, volumes and DNS are gone within minutes, so nothing idles on your bill.

canary bot commented 4 minutes ago

Preview ready for 9f3e1b0

Service Status Build
web Ready 1m 12s
api Ready 58s
worker Ready 41s
postgres Seeded 1m 30s
pr-482.northwind.canary.run

Open preview

Torn down automatically when #482 merges.

Everything staging should have been.

Each preview is a real environment with real-shaped data, its own secrets, and an end date.

Production-shaped data, minus the people

Seeded from a nightly snapshot, with names, emails and card numbers masked before they leave your cloud.

users.email maren.okafor@halyard.io user_48210@example.test
snapshot://nightly 2:00 AM PT · 1.8 GB
Table Rows Rule
users 48,210 masked
orders 312,904 copied
invoices 91,337 copied
payments 12,480 tokenized
audit_events — skipped
pr-482.northwind.canary.run

Opened by 5 people today

One link for the whole review

Design, QA and the customer who asked for it all open the same URL.

  1. Opened09:12
  2. Live09:16
  3. Merged14:03
  4. Torn down14:05

Gone the minute it merges

Nothing to remember to delete.

  • STRIPE_KEY sk_test_••••4f2a
  • DATABASE_URL postgres://pr-482.db.internal:5432/northwind
  • MAIL_DRIVER log

Secrets scoped to the branch

Test keys by default. Production credentials never reach a preview.

$38.20 of $150 this month

A ceiling on spend

Idle previews sleep after 30 minutes, and the workspace stops at the cap you set.

One file, checked in next to your code.

canary.yml describes the stack once. Every branch reads its own copy, so previews change in review like everything else.

Compose or Helm
Point Canary at the file you already run locally. No second definition of your stack.
Reviewed like code
Change the preview in a pull request and that branch previews the change first.
Runs in your cloud
A runner in your AWS or GCP account builds and hosts every preview. Data never leaves it.
canary.yml main
  1. # canary.yml — read on every push
  2. preview:
  3. from: docker-compose.yml
  4. services: [web, api, worker]
  5. database:
  6. engine: postgres@16
  7. seed: snapshot://nightly
  8. mask: [users.email, users.name, cards.number]
  9. secrets: test
  10. sleep_after: 30m
  11. teardown: on_merge
  12. budget:
  13. monthly_usd: 150

What changes when every branch has a link

  • We had one staging box and a channel just for booking it. Six weeks after Canary the channel is archived, and our median review is a day shorter.

    Maren Okafor

    Maren Okafor

    Engineering Lead, Halyard

  • Designers review the real thing now, with real-shaped data, before anything merges. Nobody screenshots localhost anymore.

    Jordan Ellis

    Jordan Ellis

    Staff Engineer, Tessel

  • We set the cap at $400 a month and haven't come close. Previews sleep when nobody is looking at them.

    Sam Rivera

    Sam Rivera

    Head of Platform, Oxbow

Priced per preview-hour, not per seat.

Invite the whole company to review. Previews sleep when idle, and you only pay while one is awake.

Compare every plan
  • Hobby

    $0 up to 3 previews at once

    For side projects and trying it on a real repo.

    • 500 preview-hours a month
    • Seeded Postgres and Redis
    • Public GitHub and GitLab repos
  • Team

    Most teams

    $0.19 per preview-hour

    Unlimited reviewers. You pay for the minutes a preview is awake.

    • Unlimited concurrent previews
    • Masked production snapshots
    • Spend caps, SSO and audit log

Running more than 200 previews a day? Ask about volume pricing and a dedicated runner. Talk to sales

Give the next pull request a link.

Connect a repository and Canary builds your first preview while you watch the log. The first 500 preview-hours are free.

Two engineers reviewing a preview on a laptop
pr-482 torn down Merged into main · 14:05